Android Tips #24 Google Maps Android API v2 で 3D マップを表示する

Android Tips #24 Google Maps Android API v2 で 3D マップを表示する

Clock Icon2012.12.09

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

はじめに

先日12月3日に Google Play Services が刷新され、 Google Maps Android API がバージョンアップしました!
3Dマップが利用できたり地図を傾けたり回転させたり、Google Map アプリでしかできなかったような機能もアプリに組み込めるようになりました。
ということで今回は Google Maps Android API v2 で 3D マップを表示するサンプルを作成したいと思います。

Google Maps API Key を取得する

まずはじめに Google Maps API Key を取得します。以下のサイトにアクセス(Googleアカウントが必要です)。

「Create Project」をクリックしてプロジェクトを作成します。

プロジェクトを1つ以上作成済みのかたは右上のプルダウンメニューをクリックすると「Create...」と出てくるのでそこから作成しましょう。

サービス一覧の中から「Google Maps Android API v2」を探して ON にします。

左のメニューから「API Access」を選び、「Simple API Access」欄の「API key」のところをメモします。

とりあえず試せればよいので今回はこの方法で API Key を取得していますが、正式にリリースしたいときは keystore から SHA-1 ハッシュ値を取得し、それをもとに API Key を作る必要があります。作りかたは以下を参考にしましょう。

Google Play ライブラリのインストール

まずは Android SDK Manager を開きます。Google Play services にチェックを入れてインストールします。

インストールが終わったらライブラリのプロジェクトファイルをワークスペースにインポートしましょう。「 File > New > Other...」を選んで、「Android Project from Existing Code」を選びます。

ルートディレクトリは以下を指定します。

${SDK_ROOT}/extras/google/google_play_services/libproject/google-play-services_lib

これでライブラリを使用できるようになりました。

アプリを作る

ではいよいよアプリを作ってみましょう!まずは新しいプロジェクトを作成します。Google Maps Android API がサポートされる最小APIバージョンは 8 (Android 2.2) なので、 Minimum Required SDK は 8 以降を指定しましょう。また Activity は BlankActivity を指定しておくこととします。

次に、ライブラリプロジェクトを読み込みます。プロジェクトプロパティで「Android」設定画面を開き、Libraryのところの「Add...」をクリックし、先ほど追加したプロジェクトを選択します。

次に AndroidManifest.xml を以下のように修正します。 uses-permission と uses-feature と meta-data を追加しています。 meta-data の your_api_key には先ほど確認した API キーを入れてください。

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
	package="jp.classmethod.android.sample.map"
	android:versionCode="1"
	android:versionName="1.0" >

	<uses-sdk
		android:minSdkVersion="8"
		android:targetSdkVersion="17" />

	<!-- Google API へのアクセス -->
	<uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES" />
	<!-- インターネットへのアクセス -->
	<uses-permission android:name="android.permission.INTERNET" />
	<!-- 外部SDカードへの書き込み -->
	<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
	<!-- 位置情報の取得 (Wi-Fi経由) -->
	<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
	<!-- 位置情報の取得 (GPS経由) -->
	<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />

	<!-- OpenGL ES version 2 -->
	<uses-feature
		android:glEsVersion="0x00020000"
		android:required="true" />

	<application
		android:allowBackup="true"
		android:icon="@drawable/ic_launcher"
		android:label="@string/app_name"
		android:theme="@style/AppTheme" >
		
		<!-- Google API の認証キー -->
		<meta-data
			android:name="com.google.android.maps.v2.API_KEY"
			android:value="your_api_key" />
		
		<activity
			android:name="jp.classmethod.android.sample.map.MainActivity"
			android:label="@string/app_name" >
			<intent-filter>
				<action android:name="android.intent.action.MAIN" />
				<category android:name="android.intent.category.LAUNCHER" />
			</intent-filter>
		</activity>
		
	</application>

</manifest>

次にレイアウトを作成しましょう。 activity_main.xml のレイアウトを以下のように修正します。

<fragment
	xmlns:android="http://schemas.android.com/apk/res/android"
	android:id="@+id/map_frag"
	android:layout_width="match_parent"
	android:layout_height="match_parent"
	class="com.google.android.gms.maps.SupportMapFragment" />

あとは Activity に setContentView() して終わりです。以下のようになっていればOKです。

package jp.classmethod.android.sample.map;

import android.app.Activity;
import android.os.Bundle;

public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }

}

実機で試しましょう!

ちなみに平面表示を 3D 表示にするには2本指で上下にスクロールします。

まとめ

今回は Google Maps Android API v2 を使って簡単なサンプルで試しましたが、もうこれだけでマップアプリが完成したようなものと感じちゃうほど機能が充実してるのでかなり有用です。機能追加も数行で済むので、自分のアプリに合わせて簡単にカスタマイズできそうですね!

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.